package com.example.yyy

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Window
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.longToast
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.toast

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        requestWindowFeature(Window.FEATURE_NO_TITLE)
        setContentView(R.layout.activity_main)
        startActivity<FilePathActivity>()
        finish()
        //点击事件
        tv_hello.setOnClickListener {
            tv_hello.setText("你点击了一下");
        }
        //长按事件
        tv_hello.setOnLongClickListener {
            tv_hello.text = "长按一下";
            startActivity<SentenceActivity>(
                Pair("toTime",DateUtil.nowDate),
                Pair("toInt",1)
            //    "toInt" to 1

            )

            true
        }
        Toast.makeText(this, "hhhh", Toast.LENGTH_SHORT).show();
        //anko库toast
        toast("hhhh");
        longToast("hhhh");
        //基本数据类型 kotlin(Int,Long,Float,Double,Boolean,Char,String) java(int和Integer,long和Long,float和Float,boolean和Boolean,char,string)
        //var 变量 val 常量
        var i : Int =0;
        //空安全无须判断是否为空
        var str : String? = null;
        var l:Int=0
        l=str?.length?:-1
        //str = "abcd"
       // l=str!!.length //显而易见str为空它运行会报错
        //转型(toInt,toLong,toFloat,toDouble,toChar,toString)
        str = i.toString()
        //数组(IntArray,LongArray,FloatArray,DoubleArray,BooleanArray,CharArray,StringArray) 初始化（intArrayOf ...）
        //但在Kotlin这里， 并不存在名为StringArray的数组类型、因为String是一种特殊的基本数据类型。
        // 要想在Kotlin中声明字符串数组，得使用Array<String>类型，分配字符串数组的方法也相应变成了arrayOf
        //其他数组也可以用“Array<String>”方式
      //  var int1_array : Array<Int> = arrayOf(1,2,3);
        val array : Array<String> = arrayOf("1","2","3")
        //array1数组的大小为2 值有["0","1"]
//        var array1: Array<String> = Array(2 ,{i -> i.toString})
        val array1: Array<String> = Array(2){ i -> i.toString()}
        //元素操作
        val length : Int = array.size;
//        var get : Int = int1_array.get(0);
        var get : String = array[0];
//        int1_array.set(0,1);
            array[0] = "233";
        //字符串转基本数据类型（toInt,toLong,toFloat,toDouble,toChar,toBoolean）
        //indexOf()
        var origin : String = tv_origin.text.toString();
        var origin_trim : String? = origin;
        if (origin_trim?.indexOf(".")!! >0){
            origin_trim = origin_trim.substring(0,origin_trim.indexOf("."));
//            origin_trim.replace("","")
        }
        tv_origin.text = origin_trim;
        //split() 返回值String[](java) List<String> (kotlin)
        tv_split.setOnClickListener {
            var strList : List<String> = origin.split(".");
            var strResult : String  ="";
            for (item in strList){
                strResult = strResult + item + ",";
            }
            tv_origin.text = strResult;
        }
        //获取某个位置字符
        var number : Int  = 3;
        tv_origin.text = origin[number].toString();
//        tv_origin.text = origin.get(number).toString()
        //字符串拼接 $特殊字符 表达用\$ ${'$'}
        btn_format.setOnClickListener {
//            tv_test.text = "字符串为 $origin";
            tv_test.text = "字符串为 ${origin.length}";
        }
        //容器（(只读)Set,List,Map,（可变）MutableSet,MutableList,MutableMap）初始化方法（setOf,......）
        //MutableSet能操作add remove(元素)方法 MutableList有下标能操作get,add,set,removeAt(下标)
        // MutableMap键值对能操作 判断指定键、值元素是否存在containKey containValue put remove
        //isEmpty:判断该容器是否为空
        //isNotEmpty:判断该容器是否非空
        //clear: 清空该容器
        //contains: 判断该容器是否包含指定元素
        //iterator: 获取该容器的迭代器
        //count: 获取该容器包含的元素个数，也可通过size属性获得元素数量
        var sList : List<String> = listOf("123","13","14");
        //for-in循环 1
        var desc = "";
        for (item in sList){
            desc = "${desc}名称：${item}\n";
        }
        //for-in循环 1
        desc = "";
        // sortBy表示升序排列，后面跟的是排序条件
        sList.sortedBy {
            it.length
        }
        // sortByDescending表示降序排列，后面跟的是排序条件
        sList.sortedByDescending {
            it.length
        }
        // indices是队列的下标数组。如果队列大小为10，下标数组的取值就为0~9
        for (i in sList.indices){
            desc = "${desc}名称：${sList[i]}\n";
        }
        //迭代器遍历
        var desc1 = "";
        var iterator = sList.iterator();
        //如果迭代器还存在下一个节点,就继续取出下一个节点的记录
        while (iterator.hasNext()){
            var next = iterator.next()
            desc1 = "${desc1}名称：${next}\n";
        }
        //foreach遍历
        var desc2 = "";
        sList.forEach{
            desc2 = "${desc2}名称：${it}\n";
        }
        tv_hello.text = desc2;
        //to方式映射
        var goodsMap : Map<String,String> = mapOf("苹果" to "iphone 11","小米" to "小米 9","魅族" to "魅族pro16s");
        //Pair方式映射
        var goodsMutMap : MutableMap<String,String> = mutableMapOf( Pair("苹果" , "iphone 11"),
            Pair("小米" , "小米 9"), Pair("魅族" , "魅族pro16s"));
    }
}